E−MATE ――――――――――――――――――――――――――――――――――――――― Oh!mz 1986年 5月号掲載 S−OS SWORD用 マシン語 03000H−03CA2H S:03000H 起動方法 E−MATEをロード J3000 コールドスタート:03000H ホットスタート :03003H *S−OS用はE−MATE  X1/turbo+S−OS専用    E-MATE X1  mz−80B/2000+S−OS専用 E-MATE MZ80B  mz−80K/700+S−OS専用  E-MATE MZ80K  .ASCはソースファイル  E−MATE.ASCをZEDA−3でアセンブルする場合  7行のOFFSET  4D00H−3000Hを  OFFSET  4E00H−3000H等に変更して  アセンブルして下さい ――――――――――――――――――――――――――――――――――――――― 全機種共通S−OS“SWORD”要  ス ク リ ー ン エ デ ィ タ  E − M A T E 全機種共通システム初の本格的スクリーンエディタがついに完成しました。 その名も「エディットの伴侶」、E−MATEです。 「イーメイト」と呼んでください。 皆さんがプログラムを作るときいつもそばにいて 手助けができるようにそんな願いがこもっています。 ●エディタってなんだろう BASICを使っているときにはまったく意識しなかった エディタというもの。 エディタっていったいどんなものなんでしょう。 エディットとは編集するという意味です。 たとえばそれが文章の場合は表現を変えたり、言葉を補ったり、 順序を換えてまとめ直したりすることですね。 私のこの原稿も編集室の人の手を煩わせて 皆さんの目に触れているわけです。 BASICのプログラム(テキスト)を作って、 変更したり、削除したり、追加したりする。 これも編集、エディットです。 マシン語モニタのメモリセットコマンドで、 メモリの内容を変更。 そう、エディットです。 こうして改めて考えてみると、 私たちがコンピュータをいじるときには、 意識しないうちにずいぶんとエディットをしてるんですね。 コンピュータでエディットをしているときには、 エディットを目的として作られたプログラムが走っているのです。 このプログラムのことをエディタといいます (ちなみに編集者のこともエディタといいます)。 もしエディタがついていなければ、 プログラムを作ることなどできません。 行番号を管理し編集してくれるものがないのですから、 もうどうにも手のくだしようがないのです。 「いいもん。マシン語やるもん」とおっしやるあなた。 マシン語の入力もエディタを使うんですよ。 ほら、困ったでしょう。 エディタは、このようにとても大切な役割を さりげなく果たしているプログラムなのです。 ひとことでエディタといってもさまざまな種類のものがあります。 ここでは大きく3つに分けて違いをみることにしましょう。 ●ラインエディタ  一度に1行しかエディットできないエディタです。  BASICでLIST nとやって第n行だけを表示させ  エディットするのによく似ていますが、  BASICのようにカーソルを移動させて  エディットするという方法は使用できず、  まことにもって面倒な手順を踏まなければなりません。  CP/MのED、MS−DOSのEDLINがそうです。 ●カーソルエディタ  BASICのエディタやZEDAのエディタがそうで、  行の先頭についている行番号によってエディット行を管理するものです。  カーソルを画面中自由に動かしてエディットでき、  ラインエディタと比較すると格段に使いやすいのですが、  画面に表示されていない行をエディットするには、  コマンド(LISTなど)を使って表示する必要があります。 ●スクリーンエディタ  カーソルエディタが画面内しか移動できないのに対し  作製中のプログラムの中を自由に移動してエディットすることができます。  カーソルが画面端にくると画面がスクロールして、  あたかも紙に書くような感覚で使えます。  1行入力するたびにリターンキーを押さなくてもよいようになっており、  非常に自然にエディットできるのです。  CP/M上のWordMaster Minceなど  強力なものが多く出ています。  ところがどっこいぎっちょんちょん。  この世にできの悪いスクリーンエディタほど  うっとうしいものはないのです。  とりわけスクロールの速度が遅く、  しかもページごとのスクロールのように  数行まとめてスクロールさせる機能のないものなどは最悪です。  BASICのエディタのほうがはるかに使い勝手がよかったりします。  さらにこの世にはラインエディタを極めている人々があり、  彼らの話によると  極めればラインエディタほど使いやすいものはないそうです。 今回発表するE−MATEは、 S−OSS上のアプリケーション用のプログラムテキストを 作成するためのツールです。 ZEDA、CAP-X、Prolog、magi FORTHのテキストを 作ることができます。 なおPrologのプログラムを作るには 別のユーティリティが必要です(後述)。 ●E−MATEの誕生まで 久しい以前からBASICでプログラムを作っているときに 画面が上下スクロールしないのが、 私はうっとうしくてしかたがありませんでした。 MZ−2000の標準BASICにはサーチ命令すらありませんから、 プログラム作りはかなり気合いのいる作業だったのです。 その点EDASMやZEDAのエディタにはサーチコマンドのみならず、 文字列置き換えコマンドまで用意されており、 本当に重宝しました。 それでもテキストの上下スクロールヘの欲求は抑えがたく、 ZEDAにコマンドを追加しようかとも思ったのですが、 この際だからスクリーンエディタを作ってしまえ! と思ったのが去年の10月のことです。 MZ−2000上で動くものをとりあえず作り、 以後マシン語プログラムはすべてこのエディタで書きました。 「マシン語体操」の連載のプログラムもそうですし、 なんとS−OS“SWORD”もそうなのです。 その間にもバージョンアップを続け、 MZ−2000用のE−MATEはバージョン0.4Eまで進化しました。 「E−MATE V0.4E」の名を誌面で見つけた方もあるかと思います。 どうもお騒がせしました。 今回発表のE−MATEも、 E−MATE V0.4Eでソースを作成したものです。 いわばE−MATEはE−MATEによって作成されたともいえるわけですね。 スクリーンエディタというものは、 一度使ったらやめられなくなるほどの魅力を持っています。 テキストの中を自由に移動してエディットしていく醍醐味を どうぞ味わってください。 ●入力・起動方法 図1のメモリマップを見てください。 E−MATEは3000H番地から始まります。 3CA3H〜3DA2Hはサーチ用のワークエリア、 3DA1H〜3EA0Hはタブ情報、 3EA1H〜3FA4Hは1行入力バッファ、 3FA5H〜43A4Hはデリードバッファになっています。 3000H〜3CA2H番地を リスト1のとおりに入力してセーブしてください。 起動後タブストップを設定して、 3000H〜3EA0H番地をセーブし直せば、 次回からホットスタート、コールドスタートに関係なく 設定したタブストップのまま起動することができるようになります。 各機種用のLNPRT ルーチン(リスト2)を打ち込むことにより、 画面の高速スクロールが可能です。 LNPRT プログラムを入力したE−MATEは他機種では使えませんので 注意してください。 E−MATEのコールドスタートは3000H番地、 ホットスタートは3003H番地です。 コールドスタートとホットスタートの違いは次のとおりです。 ●コールドスタート  メモリ上のテキストを消去(先頭に0を書き込む)して  E−MATEを起動する。  タブが定義されていない場合は、’−’で埋めつくす初期化を行う。 ●ホットスタート  メモリ上のテキストはそのままで起動する。  タブのチェックは行わない。  どちらの場合もデリートバッファ(後述)を初期化し、  コピー機能をオフにしたあと、  オーバータイプモードで起動します。  タブの初期化だけを行うには、3006H番地にジャンプします。  初期化後、コールしたシステムに戻ります。 図1 メモリマップ ・―――――――――――――――――・ |    3000H | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | |       |コンフィグレ | | |       |−ションエリア| | |       |−−−−−−−| | |       |       | | |       |       | | |       |       | | |       |  E-MATE  | | |       |  本体   | | |       |       | | |       |       | | |    3CA3H |―――――――| | |       |  SEAWD   | | |    3DA2H |―――――――| | |       |  TAB    | | |    3EA1H |―――――――| | |       |  LBF    | | |    3FA5H |―――――――| | |       |       | | |       |  DELBF   | | |       |       | | |    43A4H |―――――――| | |       |       | | |       |       | | |    4D00H |―――――――| | |       |  TEXT   | | |       |       | | |       |  エリア  | | |       |       | | |                 | ・―――――――――――――――――・ ●基本的な使い方 起動直後はコマンドモードになります(コマンドについては表1参照)。 図2のように画面上部に表示されます。 (1)は現在のカーソルのX座標、 (2)はエディット中の行番号を示しています。 いずれも起動直後は0です。 コマンドモードではあまり意味を持ちません。 まず、@キーを押してみてください。 (3)の/が■に変わりましたね。 今度はスペースバーを押してみてください。 再び/に戻ります。 S−OSではコントロールキーをサポートしていませんので、 このような仕様にしました。 @キーを押し(3)が■になっている状態が コントロールキーを押している状態と同じで、 コントロール状態といいます(機能については表2参照)。 コントロール状態でAのキーを押すことを、以後^Aと表記することにします。 スペースバーを押し、コントロール状態を抜けてください。 ■は/に戻りましたね。 それでは何か書いてみることにしましょう。 コマンドモードのEコマンドを使ってエディットモードに入ります。 E[CR]としてください。 図3のような画面になります。 (1)は現在オーバータイプモードにあることを示し、 (2)はあと45568バイト使えることを示しています。 右上を見てください。 コントロール状態にあるのがわかりますか? このようにエディットモードはコントロール状態から始まります。 スペースバーを押し、コントロール状態を抜けて、 テキストの作成を開始します。 カーソルキーを左右に動かしてみましょう。 COLが変化しますね。 今度は上下に動かしてみます。 動きません! これはなぜかというと、現在登録されている最終行を越えて カーソルを動かすことを禁止しているためです。 ではここで、リターンキーを押してください。 カーソルが次の行の先頭にきましたね。 今度は上の行との間を行き来できます。 LINEがカーソルに合わせて変化しているのを確認してみてください。 では、第0行に何かを書いてみることにします。 カーソルを左上に移動させて、次のように打ち込んでください。 ' Memory Dump Prigram[CR] カーソルはLINE1に移ってますね。 ここでよーく見ると、ProgramをPrigramと 打ち込んでしまっています。 これを修正するには、カーソルキーで1行上に帰り、 iの上でoをタイプすれば修正できます。 現在、書かれている文字列の上から直接タイプし直すモード、 これがオーバータイプモードです。 今度は@キーを押してコントロール状態に入り、 Oをタイプしてみてください。 INSERT MODE と表示されます。 もう一度Oを押すと、再びOVERTYPE MODE と表示されますね。 コントロール状態でOを押す(^O)と、 オーバータイプとインサートが切り替わります。 今度はインサートモードを試してみましょう。 スペースバーを押してコントロール状態を抜けてください。 カーソルを動かし、Program のPの位置にセットします。 インサートモードになっていますね。 コントロール状態は抜けてますね。 ではここで、 Utylity と打ち込んでみてください。 DumpとProgramの間にUtylityが挿入されました。 これがインサートモードです。 ここでまたまたよく見ると、UtilityがUtylihyになっています。 カーソルをyの上に動かしてiをタイプするとiが挿入され、 Utiylityになってしまいました。 yを削除しなければなりません。 E−MATEは2つの削除機能を持っています。  ^G:カーソル位置の1文字を削除  ^B:カーソルの左側の1文を削除 カーソルをyの上に動かし^Gを実行して、 ' Memory Dump Utility Program が完成です。 さて’にカーソルを合わせて^Nを実行してみてください。 1行挿入されましたね。 ^Nはカーソル位置に改行コードをインサートする機能を持っています。 行の途中で使うとそこで行を分割することが可能です。 反対に1行を削除するには^Yを使います。 これだけで、とりあえずエディットをするには十分です。 なお、@を書くには、コントロール状態で@キーを押して入力します。 エディットモードを抜けるのはSHIFT+BREAKです。 カーソルを横方向にしか動かしていないときには変更前の行が復活します。 これは、1行をエディットしたあと気が変わって(?) やはり前のままにしておきたい、 と思うとき容易に元に戻すことができるようにと思ったためで、 行の登録はリターンキーを押したとき カーソルを上下方向に動かしたときなどカーソルがエディット行を抜けるとき、 ^Nの実行など全画面を表示し直すときに実行されます。 それ以外のときにはいつでも復活が可能です。 図2 コマンドモード ・―――――――――――――――――――――――――――――――――――――・ |              __(1)_ (3)  ___(2)___     | |             |     |   |        |    | |   <E−MATE>  COL:  0 / LINE:    0    | |   ■                                 | |   ------------------------------------------------------------    | ・―――――――――――――――――――――――――――――――――――――・ 図3 エディットモード ・―――――――――――――――――――――――――――――――――――――・ |   <E−MATE>  COL:  0 / LINE:    0    | |(1)→OVERTYPE MODE       LEFT:45568←(2) | |   ------------------------------------------------------------    | |   ■                                 | ・―――――――――――――――――――――――――――――――――――――・ ●さらに使いこなすためには E−MATEのテキストは、横 255文字、 縦はメモリの許す限りの行数を使うことができます。 画面はこのテキストの一部を窓から眺めているような状態で使っています。 カーソル位置が画面の右端にくると、 エディット行が横スクロールし、 COLが 254になるまでテキストを書き込むことができます。 エディット行だけがスクロールするのはスピードを追求したためです。 ^Jは横スクロールしたエディット行に合わせて 全スクリーンを表示し直すという機能があります。 キーボードでE、S、D、Cがダイアモンドを作っていますが、 コントロール状態でカーソルを移動させるのに、 このダイアモンドを使用することができます。 順に↑←→↓に対応しています。 SとDの両側にAとFがありますね。 ^A、^Fはワード単位で左右にカーソルを動かすのに使います。 たとえば   #PRINT: LD A,0CH という行の#位置にカーソルがある場合、 ^FでカーソルはLに移ります。 さらに^Fを実行すると今度はAに移ります。 この状態で^Aを実行するとLにカーソルは戻ります。 アセンブラのソースなどを作るときにあると便利なタブ機能ですが、 E−MATEでは次のような方法で使います。 3行目に−がズラリと並んでいますね。 ここはタブストップ位置が表示してあるところです。 タブストップが設定されている場所は−が+になります。 起動直後はすべて−になっているはずです。 タブは次のタブストップまでカーソルを進める機能ですから、 まずタブストップを決めておかなければなりません。 カーソルのタブストップを設定したい位置まで動かし^Qを実行すると、 その位置にタブストップを設定します。 すでにタブストップが設定してある場合には、 タブストップが^Qでクリアされます。 アセンブラでソースを書くときには 8文字ごとにタブストップを設定しておくのが便利でしょう。 タブを実行するには^Iを入力します。 この^Iは特別なコードで、 タブ実行後自動的にコントロール状態を抜けてしまいます。 つまり、3回タブを行うには@I@I@Iと打ち込まなければいけません。 このほうが使いやすいという意見が多かったのでこういう仕様にしました。 ちょっと混乱するかとも思いますが、^Iをコマンドとしてではなく 文字として考えてください。 ●便利なデリートバッファ BASICのエディタでDELキーを使うと 画面から消された文字はどこにも残りませんね。 オートリピートを効かせていい気分で DELを使っているときなど、「あっ!」と思ったときには もうすでに削り過ぎていたという経験をお持ちの方は少なくないはずです。 E−MATEはこの点を考え、 画面から削除された文字列を貯えるバッファを用意しました。 1文字ずつ削除した場合は1文字ずつ、 1行削除した場合には1行分がバッファに入っていきます。 バッファに入っている文字は取り出すことが可能で、 削り過ぎてしまったときには簡単に吐き出させて テキストを復活させることができるのです。 このような安全保障のバッファのことをデリードバッファと呼ぶことにします。 E−MATEでデリートバッファの内容を取り出すには^Pを使用します。 E−MATEではデリートバッファがスタック構造をしているため、 最後に削除されたものから順に出てきます。 バッファは1Kバイトありますが識別子に1バイト必要なため、 1文字ずつの削除では 512文字でいっぱいになります。 これを越えた場合は古いデータから順に消えていきます。 このデリートバッファを利用してテキストを転送することが可能です。 その方法を紹介しましょう。 次のように打ち込んでください。   LD A,7   AND B   JR Z,#ERROR さて1行目と2行目を交換してみます。 まずカーソルを2行目の行頭にセットします。 ここで^Yを実行して1行削ります。 インサートモードにして、 カーソルを1行目の行頭にセットし^Pを実行。   AND A■LD A,7   JR Z,#ERROR のように表示されていますね。 リターンキーを押すと転送の完了です。 リターンキーを押したとたんに 行が2つに分かれたのに疑問をお持ちの方もいらっしゃるかと思います。 これは^Yが改行コードも削るからで、 カーソルの直前には0DHが デリートバッファより吐き出されているからです。 改行したくないときには、 ^Bで0DHをもう一度削除してください。 テキスト中の数行を他の行ヘコピーしたいときには コマンドモードのCコマンドを使います。 まずコピーしたい行にカーソルを移動させ、 SHIFT+BREAKでコマンドモードに帰ります。 C[CR]とすると、現在コピー機能がオンになっているのか オフになっているのかを表示しますから、 コピー機能をオンにしてください。 E[CR]で再びエディットモードに帰り、 コピーしたい行で^Yを実行します。 コピー機能がオンになっていると1行削除は行われず、 デリートバッファヘの取り込みだけが行われます。 デリートバッファの性質上、 複数行コピーする場合は逆順に取り込んだほうがいいと思います。 コピー先にカーソルを動かし、インサートモードで、 ^Pとリターンキーを使ってデリートバッファの内容を吐き出させます。 先の転送と同じ要領ですね。 転送/コピーとも、平均40文字の行なら 約20行一度にデリートバッファに取り込むことができます。 ただし一度にあまり欲張らないほうがいいでしょう。 私もE−MATE製作中に一度に40行ほどコピーしようとして、 数行がオシャカになった経験がありますから。 次に1行中の任意の文字列を他の場所ヘコピーする方法です。 これは次の方法で行います。 ^Bでコピーしたい文字列を削除します。 このとき^Gを使うと文字列が逆順になってしまいますので注意してください。 ^Hで行を復活させます。 SHIFT+BREAKと復活の条件は同じですが、 コマンドモードに帰らずエディットモードのままで復活できるのが特徴です。 コピー完ヘカーソルを移動させ、 ^Pでテリートバッファの内容を吐き出させてコピーします。 ●コンフイグレーション E−MATEは非常に柔軟に作ってありますので、 個人個人の好みに応じて自由に作り変えることができます。 すでにエディタを使っている人にとって 新しくコントロールコードを覚え直すのは辛いものです。 E−MATEは標準でWord Masterに準拠していますが、 このキー配列は自由に変更することが可能です。 コントロール状態に入る@キー、コントロール状態を抜けるスペースキーも、 好みに合わせて変更可能です。 ^R ^Cで行う改ページを半ページスクロールにすることもできます。 また、テキストの格納開始アドレスを書き換えることにより、 自由な位置にテキストを書くこともできます。 現在は4D00Hから作成するようになっていますので、 テキスト作成後ZEDAをホットスタートさせれば、 すぐにアセンブル可能です。 また、コンフィグレートの方法を表3にまとめておきましたので 参考にしてください。 自分としては、まだまだ欲しい機能があるのですが、 それらはいずれ機会をみて、 E−MATE支援パッケージとして発表していきたいと考えています。 楽しみにしていてください。 表1 コマンドー覧 ・―――――――――――――――――――――――――――――――――――――・ | コマンド |          機     能             | |――――――+――――――――――――――――――――――――――――――| | En   | n行からエディットを始める。nを省略すると          | |      | 最後にエディットした行でエディットを始める。           | |――――――+――――――――――――――――――――――――――――――| | Tn   | n±10行を表示する。ポインタ の変更は行わないので、     | |      | E[CR]で表示                       | |      | 行のエディットは行えない。                  | |――――――+――――――――――――――――――――――――――――――| |F<文字列> | 現在のラインから<文字列>を捜し始める。          | |      | <文字列>を省略すると前回のものを捜す。          | |      | 見つけたときには次の3つのキーが有効。          | |      |  ○SHIFT+BREAK:コマンドに戻る             | |      |  ○リターンキー:サーチを続ける             | |      |  ○スぺースキー:エディットに入る            | |      | <文字列>は以下の書式に従う               | |      |  文字は”で囲む                     | |      |  16進数は直接表記                   | |      | 例)STR[CR]を捜すには”STR”0D          | |――――――+――――――――――――――――――――――――――――――| | B    | 0行を指定する働きを持つ。Fコマンドの前に置いて使用する。  | |――――――+――――――――――――――――――――――――――――――| | C    | コピー機能のON、OFFを指定する。           | |Dn1−n1  | n1行〜n2行を削除する。                  | |――――――+――――――――――――――――――――――――――――――| |S<ファイル名> | 現在作成しているテキストを<ファイル名>でセーブする。     | |      | ディスクの場合、                     | |      | S[CR]またはS<デバイス>:[CR]で、デバイスのディレクトリ を表示し、| |      |             ファイル名入力モードとなる。     | |      |             カーソルをセーブしたいファイル名上に動かし、| |      |             リターンキーを押すとセーブを開始する。 | |――――――+――――――――――――――――――――――――――――――| |L<ファイル名> |現在作成しているテキストの後ろに<ファイル名>で指定された      | |      |ファイルを読み込む。                      | |      |<ファイル名>を省略した場合の処理はS コマンドと同様。       | |――――――+――――――――――――――――――――――――――――――| | &    |現在作成中のテキストを消去する。              | |――――――+――――――――――――――――――――――――――――――| | R    |テキストを復活する。                    | |――――――+――――――――――――――――――――――――――――――| | Q    |E−MATEを抜け、呼び出したシステムにリターンする。   | ・―――――――――――――――――――――――――――――――――――――・ 表2コントロール機能一覧 ・―――――――――――――――――――――――――――――――――――――・ |分類|キー |機能番号|        機     能          | |――+―――+――――+―――――――――――――――――――――――――| |  |^A | 01H | 1ワード左へ                  | |  |^S | 13H | 1文字左へ                   | |カ |←  | 1DH |   〃                     | || |^D | 04H | 1文字右ヘ                   | |ソ |→  | 1CH |   〃                     | |ル |^F | 06H | 1ワード左へ                  | |移 |^E | 05H | 1行上へ                    | |動 |↑  | 1EH |   〃                     | |  |^X | 18H | 1行下へ                    | |  |↓  | 1FH |   〃                     | |――+―――+――――+―――――――――――――――――――――――――| |画 |^W | 17H | 画面を1行下ヘスクロール            | |面 |^Z | 1AH | 画面を1行上ヘスクロール            | |コ |^R | 12H | 画面を1ページ下ヘスクロール(初期値は21行)  | |ン |^C | 03H | 画面を1ページ上ヘスクロール(初期値は21行)  | |ト |^J | 0AH | 画面を表示し直す(エディット行が横スクロールした| || |   |    | ときに使用)                  | |ル |   |    |                         | |――+―――+――――+―――――――――――――――――――――――――| |削 |^G | 07H | カーソル位置の文字を削除            | |  |^B | 02H | カーソルの左の文字を削除            | |除 |^Y | 19H | 改行を含めた1行を削除             | |――+―――+――――+―――――――――――――――――――――――――| |タ |^Q | 11H | カーソル位置にタブストップを設定する      | |ブ |   |    | 既設定時は解除する               | |機 |^I | 09H | 次のタブストップまでカーソルを動かし、     | |能 |   |    | コントロール状態を抜ける            | |――+―――+――――+―――――――――――――――――――――――――| |  |^0 | 0FH | オーバータイプとインサートを切り替える     | |そ |^M | 0DH | 改行する                    | |  | | 0DH | 改行する                    | |の |^N | 0EH | カーソル位置に改行コードを書き込む       | |  |^P | 10H | スクラッチパッドの内容を取り出す        | |他 |^H | 08H | カーソル行を変更前の状態に戻す         | |  |   |    | (主にコピーに使用)              | |――+―――+――――+―――――――――――――――――――――――――| |特 |SHIFT | 1BH | コマンドモードに帰る              | |殊 |+BREAK|    |                         | ・―――――――――――――――――――――――――――――――――――――・ 表3 E−MATEコンフィグレーション ・―――――――――――――――――――――――――――――――――――――・ |ADRS| 初 期 値  |       意      味        | |――――+――――――――+―――――――――――――――――――――――| |3009|00 4D   |テキスト格納アドレス             | |300B|15      |1ページの行数                | |300C|40      |コントロール状態に入るキー          | |300D|20      |コントロール状態を抜けるキー         | |    |        |※上の2つを同じにするとそのキーは入力できなく| |    |        | なる。                   | |――――+――――――――+―――――――――――――――――――――――| |300E|01〜07   |コントロールコードと機能番号の対照テーブル。 | |3015|08〜0E   |^Aに対応する機能番号が300Eに         | |301C|0F〜15   |^Sに対応する機能番号が300Fにというぐあいに、 | |3023|16〜1C   |^A〜↓(01H〜1FH)に対応する機能番号が     | |302A|1D〜1F   |順に書き込んである。             | |    |        |たとえば^Uで1行削除するには         | |    |        |(3022H)を19Hにする。             | |――――+――――――――+―――――――――――――――――――――――| |302D|3B 3A 2E 2C 20 |1ワード右左で、スペースとみなして飛ばすキャラクタ。  | |3032|00 00 00 00 00 |アセンブラ ソースを作成するときには         | |    |        |;(3BH)を00にしておいたほうが便利。      | ・―――――――――――――――――――――――――――――――――――――・